Importing the required library.

library(tidyverse)
library(plotly)
library(sf) # For spatial data
library(ggplot2)

Loading the data from the data directory and reading it through the imported library.

birth_data_url <- "../data/us_births_00_14.csv"
births <- read.csv(birth_data_url, stringsAsFactors = FALSE)

filtering data to create plot

monthly_births <- births %>%
  group_by(year, month) %>%
  summarize(total_births = sum(births), .groups = 'drop') %>%
    mutate(date = as.Date(paste(year, month, "01", sep = "-")),
         month_name = format(date, "%B"))

Visualization 2 - Linear Model: Total Births Over Years

generating interactive plot from the filtered data

plot <- plot_ly(monthly_births, x = ~year, y = ~total_births, type = 'scatter', mode = 'lines+markers', text = ~paste("Year:", year, "<br>Month:", month_name, "<br>Total Births:", total_births), 
                hoverinfo = 'text') %>%
  layout(
    title = "Total Monthly Births in the US (2000-2014)",
    xaxis = list(title = "Year"),
    yaxis = list(title = "Total Births")
  )
plot

Visualization 2 - Linear model: Predicting total births based on year

Linear model: Predicting total births based on year

model <- lm(total_births ~ year, data = monthly_births)

Summary of the model

summary(model)

Call:
lm(formula = total_births ~ year, data = monthly_births)

Residuals:
   Min     1Q Median     3Q    Max 
-44575 -12125     57  13426  50872 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2361462     624179   3.783 0.000211 ***
year           -1004        311  -3.230 0.001475 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 18030 on 178 degrees of freedom
Multiple R-squared:  0.05536,   Adjusted R-squared:  0.05005 
F-statistic: 10.43 on 1 and 178 DF,  p-value: 0.001475

Plot the model with ggplot2

ggplot(monthly_births, aes(x = year, y = total_births)) +
  geom_point() +
  geom_smooth(method = "lm", col = "#532D8E") +
  labs(title = "Linear Model: Total Births Over Years", x = "Year", y = "Total Births") +
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

Visualization 3 - Lakes in Florida

Reading the shape file from the data directory

lakes <- st_read("../data/Florida_Lakes/Florida_Lakes.shp")
Reading layer `Florida_Lakes' from data source 
  `C:\Users\desdiv10\Documents\Assignments\Data Visualization\workspace\dataviz_final_project\data\Florida_Lakes\Florida_Lakes.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 4243 features and 6 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -87.42774 ymin: 25.02625 xmax: -80.03097 ymax: 31.00254
Geodetic CRS:  WGS 84

mapping lakes to the florida map using red color

ggplot() +
  geom_sf(data = lakes, fill = "red", color = "black") +
  ggtitle("Lakes in Florida") +
  theme_minimal()

LS0tDQp0aXRsZTogIkludGVyYWN0aXZlIFZpc3VhbGl6YXRpb24gb2YgVVMgTW9udGhseSBCaXJ0aCBEYXRhICgyMDAwLTIwMTQpIGFsb25nIHdpdGggcHJlZGVjdGlvbiBzY2F0dGVyIHBsb3QgJiBMYWtlcyBpbiBGbG9yaWRhIC0gU3BhdGlhbCBWaXN1bGl6YXRpb24iDQphdXRob3I6ICJEaXZ5ZXNoIERlc2FpIC0gYGRkZXNhaTc2NTZAZmxvcmlkYXBvbHkuZWR1YCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoqKioNCg0KPiBJbXBvcnRpbmcgdGhlIHJlcXVpcmVkIGxpYnJhcnkuDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoc2YpICMgRm9yIHNwYXRpYWwgZGF0YQ0KbGlicmFyeShnZ3Bsb3QyKQ0KYGBgDQoNCj4gTG9hZGluZyB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhIGRpcmVjdG9yeSBhbmQgcmVhZGluZyBpdCB0aHJvdWdoIHRoZSBpbXBvcnRlZCBsaWJyYXJ5Lg0KDQoNCmBgYHtyfQ0KYmlydGhfZGF0YV91cmwgPC0gIi4uL2RhdGEvdXNfYmlydGhzXzAwXzE0LmNzdiINCmJpcnRocyA8LSByZWFkLmNzdihiaXJ0aF9kYXRhX3VybCwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQ0KYGBgDQoNCj4gZmlsdGVyaW5nIGRhdGEgdG8gY3JlYXRlIHBsb3QNCg0KYGBge3J9DQptb250aGx5X2JpcnRocyA8LSBiaXJ0aHMgJT4lDQogIGdyb3VwX2J5KHllYXIsIG1vbnRoKSAlPiUNCiAgc3VtbWFyaXplKHRvdGFsX2JpcnRocyA9IHN1bShiaXJ0aHMpLCAuZ3JvdXBzID0gJ2Ryb3AnKSAlPiUNCiAgICBtdXRhdGUoZGF0ZSA9IGFzLkRhdGUocGFzdGUoeWVhciwgbW9udGgsICIwMSIsIHNlcCA9ICItIikpLA0KICAgICAgICAgbW9udGhfbmFtZSA9IGZvcm1hdChkYXRlLCAiJUIiKSkNCmBgYA0KDQojIyMgVmlzdWFsaXphdGlvbiAyIC0gTGluZWFyIE1vZGVsOiBUb3RhbCBCaXJ0aHMgT3ZlciBZZWFycw0KDQoNCj4gZ2VuZXJhdGluZyBpbnRlcmFjdGl2ZSBwbG90IGZyb20gdGhlIGZpbHRlcmVkIGRhdGENCg0KYGBge3J9DQpwbG90IDwtIHBsb3RfbHkobW9udGhseV9iaXJ0aHMsIHggPSB+eWVhciwgeSA9IH50b3RhbF9iaXJ0aHMsIHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbGluZXMrbWFya2VycycsIHRleHQgPSB+cGFzdGUoIlllYXI6IiwgeWVhciwgIjxicj5Nb250aDoiLCBtb250aF9uYW1lLCAiPGJyPlRvdGFsIEJpcnRoczoiLCB0b3RhbF9iaXJ0aHMpLCANCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcpICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiVG90YWwgTW9udGhseSBCaXJ0aHMgaW4gdGhlIFVTICgyMDAwLTIwMTQpIiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiWWVhciIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJUb3RhbCBCaXJ0aHMiKQ0KICApDQpwbG90DQpgYGANCg0KIyMjIFZpc3VhbGl6YXRpb24gMiAtIExpbmVhciBtb2RlbDogUHJlZGljdGluZyB0b3RhbCBiaXJ0aHMgYmFzZWQgb24geWVhcg0KDQoNCj4gTGluZWFyIG1vZGVsOiBQcmVkaWN0aW5nIHRvdGFsIGJpcnRocyBiYXNlZCBvbiB5ZWFyDQoNCg0KYGBge3J9DQptb2RlbCA8LSBsbSh0b3RhbF9iaXJ0aHMgfiB5ZWFyLCBkYXRhID0gbW9udGhseV9iaXJ0aHMpDQpgYGANCg0KDQo+IFN1bW1hcnkgb2YgdGhlIG1vZGVsDQoNCmBgYHtyfQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQoNCj4gUGxvdCB0aGUgbW9kZWwgd2l0aCBnZ3Bsb3QyDQoNCg0KYGBge3J9DQpnZ3Bsb3QobW9udGhseV9iaXJ0aHMsIGFlcyh4ID0geWVhciwgeSA9IHRvdGFsX2JpcnRocykpICsNCiAgZ2VvbV9wb2ludCgpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sID0gIiM1MzJEOEUiKSArDQogIGxhYnModGl0bGUgPSAiTGluZWFyIE1vZGVsOiBUb3RhbCBCaXJ0aHMgT3ZlciBZZWFycyIsIHggPSAiWWVhciIsIHkgPSAiVG90YWwgQmlydGhzIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQoNCiMjIyBWaXN1YWxpemF0aW9uIDMgLSBMYWtlcyBpbiBGbG9yaWRhDQoNCg0KPiBSZWFkaW5nIHRoZSBzaGFwZSBmaWxlIGZyb20gdGhlIGRhdGEgZGlyZWN0b3J5DQoNCmBgYHtyfQ0KbGFrZXMgPC0gc3RfcmVhZCgiLi4vZGF0YS9GbG9yaWRhX0xha2VzL0Zsb3JpZGFfTGFrZXMuc2hwIikNCmBgYA0KDQo+IG1hcHBpbmcgbGFrZXMgdG8gdGhlIGZsb3JpZGEgbWFwIHVzaW5nIHJlZCBjb2xvcg0KDQpgYGB7cn0NCmdncGxvdCgpICsNCiAgZ2VvbV9zZihkYXRhID0gbGFrZXMsIGZpbGwgPSAicmVkIiwgY29sb3IgPSAiYmxhY2siKSArDQogIGdndGl0bGUoIkxha2VzIGluIEZsb3JpZGEiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBg